import axios from 'axios'
import { ElLoading } from 'element-plus'
import { ElMessage } from 'element-plus'
import Cookies from 'js-cookie'
//import Router from "../router";

let loading    //定义loading变量
// 开启加载动画
function startLoading() {    //使用Element loading-start 方法
    loading = ElLoading.service({
        lock: true,
        text: '加载中...',
        background: 'rgba(0, 0, 0, 0.7)'
    })
}
// 关闭加载动画
function endLoading() {    //使用Element loading-close 方法
    loading.close()
}

//创建axios的配置对象
const http = axios.create({
    // baseURL: '/api',
    baseURL: 'http://localhost:8888/mall',
    timeout: 10000,
    headers: { 'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.0.4","e":"1611800680438168268570625","bc":"310100"}' }
})

// axios 拦截器
// 请求拦截
// http.interceptors.request()
// 响应拦截
// http.interceptors.response()

// 1、请求拦截器：在请求发送之前进行一些处理
http.interceptors.request.use(function (config) {
    // 在发起异步请求时，启动 loading
    startLoading()

    config.timeout = 6000
    let token = Cookies.get('buyer_token')

    console.log("token")
    console.log(token)
    if (token) {
        config.headers = {
            'buyer-token': token,
            'Content-Type': 'application/json'
        }
    } else {
        config.headers = {
            'buyer-token': '',
            'Content-Type': 'application/json'
        }
    }

    return config
}, function (error) {
    endLoading()
    // 请求出错处理
    return Promise.reject(error) //上一次请求的响应结果，作为下一次请求（处理）的参数，类似于链式调用
})

// 2、响应拦截器：在响应结果进行一些处理
http.interceptors.response.use(response => {
    // 停止加载动画
    endLoading()

    if (response.data.code != 0) {
        // 错误代码1000 代表重新登录
        if (response.data.code == 1000) {
            Cookies.remove('business_token')
            // Router.push('/login')
        }
        console.log("失败")
        ElMessage({
            message: response.data.message,
            type: 'error',
        })
    } else {
        if (response.data.message != 'success') {
            ElMessage({
                message: response.data.message,
                type: 'success',
            })
        }
    }
    return response
}, error => {
    endLoading()
    // 响应出错处理
    return Promise.reject(error) //上一次请求的响应结果，作为下一次处理的参数，类似于链式调用
})

export default http

